<?php

function pre($data){
	echo "<pre>";print_r($data);echo "</pre>";
}

//取文件后缀名
function getExtName($filename){
	$ext = strtolower(strrchr($filename, "."));
	$ext = str_replace(".", "", $ext);
	return $ext;
}
	
	//取文件名 比如 ldfjsld.jpg 结果为：ldfjsld
	function filename($str){
		return substr($str, 0, strrpos($str, "."));	
	}
	
	//URL安全的base64加密（+换-   /换_ 去掉“=”）
	function enurl64($data) {
		return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); 
	}
	
	//URL安全的base64解密
	function deurl64($data) {
		return base64_decode(strtr($data, '-_', '+/'));
	}
	
	//数组转文件
	function a2f($file, $array){
		file_put_contents($file, "<?php \r"."return ".var_export($array, TRUE).";\r?>");
	}
	
	//得到来访IP
	function getip(){
		if(!empty($_SERVER["HTTP_CLIENT_IP"])){
		  $cip = $_SERVER["HTTP_CLIENT_IP"];
		}elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
		  $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
		}elseif(!empty($_SERVER["REMOTE_ADDR"])){
		  $cip = $_SERVER["REMOTE_ADDR"];
		}else{
		  $cip = "无法获取！";
		}
		return $cip;
	}
	
	//截取中文字符串的时候如果出现半个字符会出现乱码，用此函数可避免
	function zhsubstr_gb2312($str, $len){
		if(strlen($str) <= $len){
			return mb_strcut($str, 0, $len,'gb2312');
		}else{
			return mb_strcut($str, 0, $len-2,'gb2312')."..";
		}
	}
	
	//截取中文字符串的时候如果出现半个字符会出现乱码，用此函数可避免
	function zhsubstr_utf8($str, $len){
		if(strlen($str) <= $len){
			return mb_strcut($str, 0, $len,'utf-8');
		}else{
			return mb_strcut($str, 0, $len-2,'utf-8')."..";
		}
	}
	
	//对象转数组
	function object_to_array($obj){
//		$_arr = is_object($obj) ? get_object_vars($obj) : $obj;
//		$_arr = is_object($obj) ? (array)$obj : $obj;
		$_arr = (array)$obj;

		foreach ($_arr as $key => $val){
			$val = (is_array($val) || is_object($val)) ? object_to_array($val) : $val;
			$arr[$key] = $val;
		}
		return $arr;
	}
	
	//对象转数组(与上一个的区别是：此方法之保留public的成员变量)
	function o2a($object){
		$array = array();
		foreach($object as $key => $value){
			$array[$key] = (is_array($value) || is_object($value)) ? o2a($value) : $value;
		}
		return $array;
	}
	
	/**
	 * 支持私有属性的对象转数组，同时去掉命名空间
	 * 特殊说明：
	 * 想保留私有变量转数组只能$_arr = (array)$obj;注意这步转完，如果对象有私有变量，或者有命名空间，那么KEY（键）并非
	 * 正常的字符串，里边有类似 \0 等字符。将KEY（键）用addslashes()后即可现形，或者将数组json_encode()也可以现形,将其
	 * 过滤掉才行，如果不处理后果是无法读取，例如 $arr["aa"]，如果aa是私有变量就读不出来，或者转成JSON也会出现多余字符
	 * @author YueYa
	 * @param $obj
	 * @return mixed
	 */
	 function o2a_ns($obj){
		$_arr = (array)$obj;//注意这步转完，如果对象有私有变量，那么KEY并非正常的字符串，里边有类似 \0 等字符
		foreach ($_arr as $key => $val){
			$key = addslashes($key);//用这步可让\0等特殊字符现形
			if(strpos($key, "\\") !== false){//如果含有反斜杠（说明有命名空间或有私有变量，需要处理下）
				$key = strrchr($key, "\\0");//取\0及以后的字符串，命名空间或私有变量都是以它为边界
				$key = trim(str_replace("\\0", "", $key));//去掉\0
			}
			$val = (is_array($val) || is_object($val)) ? o2a_ns($val) : $val;//递归
			$arr[$key] = $val;
		}
		return $arr;
	}
	
	// 判断是 EMAIL
	function isemail($logincode){
		if(strlen($logincode) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $logincode)){
			return true;	
		}else {
			return false;	
		}
	}
	
	// 判断是 手机号
	function ismobile($logincode){
		if(preg_match("/^13[0-9]{9}$|15[0-9]{9}$|18[0-9]{9}$/", $logincode)){
			return true;
		}else {
			return false;	
		}
	}

	function curlget($url){
		$ch = curl_init();  
		curl_setopt($ch, CURLOPT_URL, $url);  
		curl_setopt($ch, CURLOPT_HEADER, false);  
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.1 Safari/537.11');  
		  
		$res = curl_exec($ch);  
		$rescode = curl_getinfo($ch, CURLINFO_HTTP_CODE);   
		curl_close($ch) ;  
		//echo $res;
		return $res;
	}
	
	function curlpost($url, $params){
		$ch = curl_init();
	    curl_setopt($ch, CURLOPT_HTTPHEADER, array("content-type: application/x-www-form-urlencoded; charset=UTF-8"));
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式
		curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_FAILONERROR, true);
		curl_setopt($ch, CURLOPT_TIMEOUT, 30);
		$data = curl_exec($ch);
		curl_close($ch);
		return $data;
	}
	
	//CURLPOST https版
	function httpscurl($url, $params, $timeout = 30){
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//SSL证书认证
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//严格认证
		curl_setopt($ch, CURLOPT_HEADER, 0 ); // 过滤HTTP头
		curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
		curl_setopt($ch,CURLOPT_POST,true); // post传输数据
		curl_setopt($ch,CURLOPT_POSTFIELDS, $params);// post传输数据
		curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
		$responseText = curl_exec($ch);
		curl_close($ch);
		return $responseText;
	}

	function u2g($str){
		return iconv("utf-8", "gbk", $str);	
	}

	/**
	 * 数组转文件
	 * @param string $file 文件名 
	 * @param array $array 数组 
	 */
	function mkarrfile($file, $array){
		return file_put_contents($file, "<?php \nreturn ".var_export($array, true).";\n?>");
	}
	
	/**
	 * 对象转文件
	 * @param string $file 文件名 
	 * @param object $obj 数组 
	 */
	function mkobjfile($file, $obj){
		return file_put_contents($file, "<?php return '".serialize($obj)."';?>");
	}

	/**
	 * 删除有KEY数组中指定KEY的元素
	 */
	function array_remove(&$data, $key){
		if(array_key_exists($key, $data)){
			$keys = array_keys($data);
			$index = array_search($key, $keys);
			if($index !== FALSE){
				array_splice($data, $index, 1);
			}
		}
	}


?>